package com.night.icm.service.base.service;

import com.night.icm.common.utils.PageDataDTO;
import com.night.icm.common.utils.SimpleDataDTO;
import com.night.icm.model.base.StudentDTO;

import java.util.List;

/**
 * StudentService
 *
 * @author Liao ZhiYong
 * @date 2020/1/29
 */
public interface StudentService {

    /**
     * 分页查询学生信息
     *
     * @param page         页号，从0开始
     * @param size         每页记录条数
     * @param sort         排序字段，例如：字段1,asc,字段2,desc
     * @param code         学生学号
     * @param name         学生姓名
     * @param grade        年级，即入学年份
     * @param academyId    所属学院
     * @param professionId 所属专业
     * @param classId      所属班级
     * @return 学生信息
     */
    PageDataDTO<StudentDTO> findOnePage(int page, int size, String sort, String code, String name, String grade, String academyId, String professionId, String classId);

    /**
     * 新增学生信息
     *
     * @param studentDTO   学生信息
     * @return 学生信息
     */
    StudentDTO create(StudentDTO studentDTO);

    /**
     * 根据id删除学生
     *
     * @param id 学生id
     */
    void delete(String id);

    /**
     * 更新学生信息
     *
     * @param id         学生id
     * @param studentDTO 学生信息
     * @return
     */
    StudentDTO update(String id, StudentDTO studentDTO);

    /**
     * 根据id查找学生
     *
     * @param id 学生id
     * @return 学生
     */
    StudentDTO findById(String id);

    /**
     * 查找所有学生信息，可选择排序
     *
     * @param param   排序参数
     * @param pattern 排序模式: asc/desc
     * @return 学生信息
     */
    List<StudentDTO> findAll(String param, String pattern);

    /**
     * 检查学生学号是否已存在
     *
     * @param code 学生code
     * @return 学号是否已存在
     */
    SimpleDataDTO<Boolean> checkCodeExist(String code);

    /**
     * 根据userId查找学生
     *
     * @param userId userId
     * @return 学生
     */
    StudentDTO findByUserId(String userId);

    /**
     * 统计学生数量
     *
     * @return 统计学生数量
     */
    Long countStudent();
}
